﻿using System;

namespace IMSAT.OFTD.DOM
{
    /// <summary>
    /// интерфейс для описания класса поддерживающего 
    /// чтение из одного формата в другой
    /// </summary>
    public interface IReader
    {
        /// <summary>
        /// Прочитать.
        /// </summary>
        /// <param name="source">источник</param>
        /// <returns>объект</returns>
        object Read(object source);

        /// <summary>
        /// Может ли данный ридер прочитать
        /// из данного испочника в данный объект
        /// </summary>
        /// <param name="source">источник</param>
        /// <param name="destType">объект</param>
        /// <returns>логическое значение</returns>
        bool CanRead(object source, Type destType, Node prevNode);
    }

    /// <summary>
    /// Типизированный ридер
    /// </summary>
    /// <typeparam name="TSourceType">тип источника</typeparam>
    /// <typeparam name="TDestType">тип объекта в который происходит чтение</typeparam>
    public interface IReader<TSourceType, TDestType> : IReader
    {
        /// <summary>
        /// Прочитать
        /// </summary>
        /// <param name="source">Источник</param>
        /// <returns>объект</returns>
        TDestType Read(TSourceType source);

        /// <summary>
        /// Возможно ли чтение из заданного источника
        /// </summary>
        /// <param name="source">источник</param>
        /// <returns></returns>
        bool CanRead(TSourceType source, Node prevNode);
    }
}